<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <title>04_原型链_属性问题</title>
  </head>

  <body>
    <!--
      1. 读取对象的属性值时: 会自动到原型链中查找
      2. 设置对象的属性值时: 不会查找原型链, 如果当前对象中没有此属性, 直接添加此属性并设置其值
      3. 方法一般定义在原型中, 属性一般通过构造函数定义在对象本身上
    -->
    <script type="text/javascript">
      //例子一：
      function Fn() {

      }
      Fn.prototype.a = 'xxx'
      var fn1 = new Fn()
      console.log(fn1.a, fn1) //xxx Fn{}

      var fn2 = new Fn()
      fn2.a = 'yyy'
      console.log(fn1.a, fn2.a, fn2) //xxx yyy Fn{a:'yyy'}


      //例子二：
      function Person(name, age) {
        this.name = name
        this.age = age
      }
      Person.prototype.setName = function (name) {
        this.name = name
      }
      var p1 = new Person('Tom', 12)
      p1.setName('Bob')
      console.log(p1) //{'Bob',12}

      var p2 = new Person('Jack', 12)
      p2.setName('Cat')
      console.log(p2) //{'Cat',12}
      console.log(p1.__proto__ === p2.__proto__) // true
    </script>
  </body>

</html>